首页 > 解决方案 > 如何在 MySQL DB (Windows 10, XAMPP CP v3.2.4) 中更新/插入 Cyrillic 数据?

问题描述

我在使用 XAMPP 控制面板 v3.2.4 的 Windows 10 中观察到一个奇怪的情况

终端窗口启动并连接到 Mysql DB。

注意:之前在终端窗口发出命令 'chcp 65001' 以支持 UTF8 编码。

现在,当我尝试使用 Cyrillic 中的值更新某个表时,MySQL 会抱怨未关闭的引号符号。如果我将西里尔文输入替换为英文,则接受命令。

MariaDB [youtube]> update episodes set name='Катя' where id=11;
    '>

如果我尝试将新记录插入数据库,则会发生同样的情况

MariaDB [youtube]> insert into episodes (youtube_id,series_id,season,episode,name) values (12345678904,1,0,1,'Катя');
    '>

如果使用双引号,情况相同

MariaDB [youtube]> insert into episodes (youtube_id,series_id,season,episode,title) values (12345678904,1,0,1,"Катя");
    ">

让它通过终端窗口工作需要什么神奇的触摸?

更新:

约翰建议查看设置的配置MariaDB文件UTF8

设置更改为以下,问题仍然存在

# The MySQL server
default-character-set=utf8mb4

[mysqld]
init-connect=\'SET NAMES utf8\'
character_set_server=utf8
collation_server=utf8_unicode_ci
skip-character-set-client-handshake
character_sets-dir="C:/bin/XAMPP/App/xampp/mysql/share/charsets"

最初的设置是

# The MySQL server
default-character-set=utf8mb4

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci

服务器状态报告

MariaDB [youtube]> \s
--------------
mysql  Ver 15.1 Distrib 10.4.10-MariaDB, for Win64 (AMD64), source revision c24ec3cece6d8bf70dac7519b6fd397c464f7a82

Connection id:          17
Current database:       youtube
Current user:           root@localhost
SSL:                    Not in use
Using delimiter:        ;
Server:                 MariaDB
Server version:         10.4.10-MariaDB mariadb.org binary distribution
Protocol version:       10
Connection:             localhost via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8mb4
Client characterset:    utf8mb4
Conn.  characterset:    utf8mb4
TCP port:               3306
Uptime:                 11 min 12 sec

Threads: 7  Questions: 59  Slow queries: 0  Opens: 22  Flush tables: 1  Open tables: 16  Queries per second avg: 0.087
--------------

MariaDB 文档引用了一个选项--default-character-set=name

尝试在命令行上使用对终端客户端--default-character-set=utf8mb4中插入/更新记录的行为没有影响。

mysql -u root -p --default-character-set=utf8mb4 youtube
....
MariaDB [youtube]> update episodes set title='Катя' where id=11;
    '>

标签: mariadb

解决方案


强烈建议获取免费软件程序HeidiSQL的副本。尽管与我使用过的其他所有东西相比,它并不完美,甚至偶尔会崩溃?哦,男孩,完全值得我花时间。

其次,您要确保使用以下内容:

数据库字符集:utf8mb4 数据库排序规则:utf8mb4_unicode_520_ci

从我从 Stackoverflow 成员Rick James那里读到的内容,这些具有最大的 UTF-8 支持,通过他的网站。他是 SO 上的数据库超级明星,所以如果你雇用他,就把一大笔钱丢在他的脸上。他的网站有一个比较图表。事实上,自从我上次检查以来,已经有一段时间了,520 可能已经被取代了。

要设置/更改数据库字符集,您需要更改my.cnfMariaDB 的配置文件,我建议使用 Notepad++ 进行代码编辑。这应该使任何新创建的数据库都使用正确的编码,但是您可能必须手动更新数据库、表表列的字符集和排序规则,所以不要忘记彻底!

[client]
default-character-set = utf8mb4

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_520_ci

一旦你这样做了,你用俄语/希腊语/等的查询应该像用英语一样正常工作。关键词:应该。

因为我只会说两种语言(英语和糟糕的英语),所以我将所有字符编码超过某个 Unicode 数字点,只是为了确定。它会占用更多空间,但是在定义了大部分语言之后,有时会为 Unicode 语言添加字符,因此可能会分散语言支持。如果您有兴趣发表评论,我会为您找到该代码。

我的理解水平适中,我不是 Rick James,尽管我的个人资料中的网站上有大约两三打翻译页面(使用搜索功能并搜索“翻译”),如果您想查看输出。在我做了这些事情之后,我不再让数据损坏了。我希望这有帮助!


推荐阅读