gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 21:11:03 26 4
gpt4 key购买 nike

我正在使用两个 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 字符应在的位置。

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

最佳答案

出现错误时您正在执行什么命令?

  • 您的数据显然是 utf8(良好)。
  • 您的连接显然是 utf8(良好)。
  • 您的表/列已声明为CHARACTER SET latin1?应该是utf8。

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

其他说明:
5.6 与 5.7 在这方面没有实质性差异。
@@SQL_MODE 不相关。
通常建议使用 VARCHAR 而不是 CHAR

关于mysql - mysql何时抛出错误而不是强制文本为默认列格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36367683/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com