我正在使用两台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字符的位置。
为什么两台服务器的行为不同?
答案 0 :(得分:0)
当你收到错误时,你执行了什么命令?
CHARACTER SET latin1
?它应该是utf8。那是美 - 中国,对吗?有些汉字需要4字节的utf8。因此,在上面列出的所有3种情况中,您应该使用utf8mb4
代替utf8
。
其他说明:
5.6与5.7相比,这一领域没有实质性差异
@@ SQL_MODE不相关
VARCHAR
通常建议CHAR
。