特殊字符在 MySQL 中不起作用 (UTF-8)

Nis*_*sto 4 mysql sql windows cmd character-encoding

因此,我在尝试从编码数据库、表和列中恢复过来时遇到了一些问题Latin1,现在所有内容最终都采用 UTF-8 格式,我似乎无法更新列中的行。我正在尝试将“e”替换为带锐角的 e (\xc3\xa9)。但它给了我这个:

\n\n
\n

错误 1366 (HY000):字符串值不正确:第 1 行的列\n \'Name\' 的 \'\\x82m ...\'

\n
\n\n

运行此命令时:

\n\n

UPDATE access SET Name=\'\xc3\xa9m\' WHERE id="2";

\n\n

所有数据库在运行状态命令时都会给我这个(当然除了部分current database):

\n\n
\n\n
Connection id:          1  \nCurrent database:       access  \nCurrent user:           root@localhost  \nSSL:                    Not in use  \nUsing delimiter:        ;  \nServer version:         5.1.47-community MySQL Community Server (GPL)  \nProtocol version:       10  \nConnection:             localhost via TCP/IP  \nServer characterset:    utf8  \nDb     characterset:    utf8  \nClient characterset:    utf8  \nConn.  characterset:    utf8  \nTCP port:               3306  \nUptime:                 20 min 16 sec  \n\nThreads: 1 Questions: 110 Slow queries: 0 Opens: 18 Flush tables: 1 Open tables: 11  Queries per second avg: 0.90\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n\n

在 cmd 中运行 chcp 命令给了我850. 哦,在某些时候我得到了这个:

\n\n
\n

错误 1300 (HY000): 无效的 utf8 字符串: \'\xc3\xa9m\' WHERE id="2"

\n
\n\n

我到处寻找解决方案,但似乎在任何地方都找不到任何东西,而且由于我在 Stackoverflow 上总是得到很好的回应,所以我想我应该在这里问。

\n\n

谢谢你的帮助!

\n

bob*_*nja 5

解决方案是将连接变量设置为您安装的 Windows 使用的任何代码页(不是像很多页面推荐的那样的 latin1 - cmd.exe 的字符编码不是 latin1)。

\n\n

在我的例子中,代码页是 850:

\n\n

mysql> SET NAMES cp850;

\n\n

以下是连接设置为 UTF-8 的示例:

\n\n
mysql> show variables like '%char%';\n+--------------------------+---------------------------------+\n| Variable_name            | Value                           |\n+--------------------------+---------------------------------+\n| character_set_client     | utf8                            |\n| character_set_connection | utf8                            |\n| character_set_database   | utf8                            |\n| character_set_filesystem | binary                          |\n| character_set_results    | utf8                            |\n| character_set_server     | utf8                            |\n| character_set_system     | utf8                            |\n| character_sets_dir       | C:\\xampp\\mysql\\share\\charsets\\  |\n+--------------------------+---------------------------------+\n8 rows in set (0.00 sec)\n
Run Code Online (Sandbox Code Playgroud)\n\n

这是重音字符发生的情况:

\n\n
mysql> select nom from assignatura where nom like '%prob%';\n+---------------------------------------+\n| nom                                   |\n+---------------------------------------+\n| Probabilitat i Processos Estoc\xe2\x94\x9c\xc3\xa1stics |\n| Probabilitat i Processos Estoc\xe2\x94\x9c\xc3\xa1stics |\n+---------------------------------------+\n2 rows in set (0.03 sec)\n
Run Code Online (Sandbox Code Playgroud)\n\n

\xe2\x94\x9c请注意之前的无关字符\xc3\xa1。还有重音方向不对,应该是\xc3\xa0

\n\n

执行后SET NAMES cp850;

\n\n
mysql> show variables like '%char%';\n+--------------------------+--------------------------------+\n| Variable_name            | Value                          |\n+--------------------------+--------------------------------+\n| character_set_client     | cp850                          |\n| character_set_connection | cp850                          |\n| character_set_database   | utf8                           |\n| character_set_filesystem | binary                         |\n| character_set_results    | cp850                          |\n| character_set_server     | utf8                           |\n| character_set_system     | utf8                           |\n| character_sets_dir       | C:\\xampp\\mysql\\share\\charsets\\ |\n+--------------------------+--------------------------------+\n8 rows in set (0.00 sec)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我们终于得到了正确的重音字符:

\n\n
mysql> select nom from assignatura where nom like '%prob%';\n+--------------------------------------+\n| nom                                  |\n+--------------------------------------+\n| Probabilitat i Processos Estoc\xc3\xa0stics |\n| Probabilitat i Processos Estoc\xc3\xa0stics |\n+--------------------------------------+\n2 rows in set (0.00 sec)\n
Run Code Online (Sandbox Code Playgroud)\n