mysql何时抛出错误而不是将文本强制转换为默认列格式?

时间:2016-04-02 00:05:42

标签: mysql utf-8

我正在使用两台mysql服务器,试图了解它们的行为方式不同。

我在每个表上都创建了相同的表格:

| Field          | Type       | Collation         |
+----------------+------------+-------------------+
| some_chars     | char(45)   | latin1_swedish_ci |
| some_text      | text       | latin1_swedish_ci |

我设置了相同的字符集变量:

| Variable_name            | Value
+--------------------------+-------+
| character_set_client     | utf8                                                 
| character_set_connection | utf8                                                 
| character_set_database   | latin1                                               
| character_set_filesystem | binary                                               
| character_set_results    | utf8                                                 
| character_set_server     | latin1                                               
| character_set_system     | utf8

当我在一台服务器上的数据库中插入UTF-8字符时,出现错误:

DatabaseError: 1366 (HY000): Incorrect string value: '\xE7\xBE\x8E\xE5\x9B\xBD...'                                                

其他服务器中的相同插入不会引发错误。该表只是默默地接受utf-8插入并呈现一堆?标记utf-8字符的位置。

为什么两台服务器的行为不同?

1 个答案:

答案 0 :(得分:0)

当你收到错误时,你执行了什么命令?

  • 您的数据显然是utf8(很好)。
  • 你的联系显然是utf8(好)。
  • 您的表/列已声明为CHARACTER SET latin1?它应该是utf8。

那是美 - 中国,对吗?有些汉字需要4字节的utf8。因此,在上面列出的所有3种情况中,您应该使用utf8mb4代替utf8

其他说明:
5.6与5.7相比,这一领域没有实质性差异 @@ SQL_MODE不相关 VARCHAR通常建议CHAR