MySqlException: Incorrect string value: '\xE6\x99\xBA\xE8\x83\xBD...' for column 'FieldName' at row 1
<p>问题:MySqlException: Incorrect string value: '\xE6\x99\xBA\xE8\x83\xBD...' for column 'FieldName' at row 1</p><p>原因:在 MySQL 中遇到错误 MySqlException: Incorrect string value: '\xE6\x99\xBA\xE8\x83\xBD...' 通常是由于尝试将一个不兼容的字符编码插入到数据库中导致的。这个问题最常见的原因是尝试将 UTF-8 编码的字符串存储到不支持 UTF-8 的数据库表中。</p>
<p>解决步骤</p>
<h2>一、确认数据库和表的字符集</h2>
<p>首先,你需要确认你的数据库和表的字符集是否支持 UTF-8。可以通过以下 SQL 命令查看:</p>
<div class="cnblogs_code">
<pre>SHOW <span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">DATABASE</span><span style="color: rgba(0, 0, 0, 1)"> your_database_name;
SHOW </span><span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> your_table_name;</pre>
</div>
<p>查看 CHARACTER SET 和 COLLATE 字段,确保它们是 utf8mb4(推荐用于存储 emoji 和其他 Unicode 字符)。</p>
<h2>二、修改数据库或表的字符集</h2>
<p>如果发现字符集不是 utf8mb4,你可以修改它。使用以下命令:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">#修改数据库的字符集
</span><span style="color: rgba(0, 0, 255, 1)">ALTER</span> <span style="color: rgba(0, 0, 255, 1)">DATABASE</span> your_database_name <span style="color: rgba(0, 0, 255, 1)">CHARACTER</span> <span style="color: rgba(0, 0, 255, 1)">SET</span> <span style="color: rgba(128, 128, 128, 1)">=</span> utf8mb4 COLLATE <span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)"> utf8mb4_unicode_ci;
#修改表的某个字段的字符集
</span><span style="color: rgba(0, 0, 255, 1)">ALTER</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> your_table_name MODIFY <span style="color: rgba(0, 0, 255, 1)">COLUMN</span> your_colum_name <span style="color: rgba(0, 0, 255, 1)">VARCHAR</span>(<span style="color: rgba(128, 0, 0, 1); font-weight: bold">255</span>) <span style="color: rgba(0, 0, 255, 1)">CHARACTER</span> <span style="color: rgba(0, 0, 255, 1)">SET</span><span style="color: rgba(0, 0, 0, 1)"> utf8mb4;
#或修改整个表的字符集
</span><span style="color: rgba(0, 0, 255, 1)">ALTER</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> your_table_name <span style="color: rgba(255, 0, 255, 1)">CONVERT</span> <span style="color: rgba(0, 0, 255, 1)">TO</span> <span style="color: rgba(0, 0, 255, 1)">CHARACTER</span> <span style="color: rgba(0, 0, 255, 1)">SET</span> utf8mb4 COLLATE utf8mb4_unicode_ci;</pre>
</div>
<h2>三、检查连接字符集</h2>
<p>确保你的数据库连接也使用 UTF-8。如果你使用的是 MySQL Connector/NET,可以在连接字符串中指定字符集:</p>
<div class="cnblogs_code">
<pre>string connStr <span style="color: rgba(128, 128, 128, 1)">=</span> "server<span style="color: rgba(128, 128, 128, 1)">=</span>your_server;<span style="color: rgba(255, 0, 255, 1)">user</span><span style="color: rgba(128, 128, 128, 1)">=</span>your_username;<span style="color: rgba(0, 0, 255, 1)">database</span><span style="color: rgba(128, 128, 128, 1)">=</span>your_database;port<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(128, 0, 0, 1); font-weight: bold">3306</span>;password<span style="color: rgba(128, 128, 128, 1)">=</span>your_password;CharSet<span style="color: rgba(128, 128, 128, 1)">=</span>utf8mb4;";</pre>
</div>
<h2>四、配置MySQL服务端</h2>
<p>修改my.cnf/my.ini文件添加:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">client</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(0, 0, 255, 1)">character</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">utf8mb4
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">mysql</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 0, 255, 1)">default</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(0, 0, 255, 1)">character</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">utf8mb4
</span><span style="color: rgba(255, 0, 0, 1)">[</span><span style="color: rgba(255, 0, 0, 1)">mysqld</span><span style="color: rgba(255, 0, 0, 1)">]</span>
<span style="color: rgba(0, 0, 255, 1)">character</span><span style="color: rgba(128, 128, 128, 1)">-</span><span style="color: rgba(0, 0, 255, 1)">set</span><span style="color: rgba(128, 128, 128, 1)">-</span>server<span style="color: rgba(128, 128, 128, 1)">=</span><span style="color: rgba(0, 0, 0, 1)">utf8mb4
collation</span><span style="color: rgba(128, 128, 128, 1)">-</span>server<span style="color: rgba(128, 128, 128, 1)">=</span>utf8mb4_unicode_ci</pre>
</div>
<p>然后重启MySQL服务。</p>
<h2>五、新建表规范</h2>
<p>创建新表时显式指定编码:</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">CREATE</span> <span style="color: rgba(0, 0, 255, 1)">TABLE</span> 表名 (...) ENGINE<span style="color: rgba(128, 128, 128, 1)">=</span>InnoDB <span style="color: rgba(0, 0, 255, 1)">DEFAULT</span> CHARSET<span style="color: rgba(128, 128, 128, 1)">=</span>utf8mb4;</pre>
</div>
<p>这是最推荐的长期解决方案。</p>
<p> </p><br><br>
来源:https://www.cnblogs.com/jixingsuiyuan/p/19080930
頁:
[1]