mariadb - 如何在 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;
'>
解决方案
我强烈建议获取免费软件程序HeidiSQL的副本。尽管与我使用过的其他所有东西相比,它并不完美,甚至偶尔会崩溃?哦,男孩,完全值得我花时间。
其次,您要确保使用以下内容:
数据库字符集:utf8mb4
数据库排序规则:utf8mb4_unicode_520_ci
从我从 Stackoverflow 成员Rick James那里读到的内容,这些具有最大的 UTF-8 支持,通过他的网站。他是 SO 上的数据库超级明星,所以如果你雇用他,就把一大笔钱丢在他的脸上。他的网站有一个比较图表。事实上,自从我上次检查以来,已经有一段时间了,520 可能已经被取代了。
要设置/更改数据库字符集,您需要更改my.cnf
MariaDB 的配置文件,我建议使用 Notepad++ 进行代码编辑。这应该使任何新创建的数据库都使用正确的编码,但是您可能必须手动更新数据库、表和表列的字符集和排序规则,所以不要忘记彻底!
[client]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_520_ci
一旦你这样做了,你用俄语/希腊语/等的查询应该像用英语一样正常工作。关键词:应该。
因为我只会说两种语言(英语和糟糕的英语),所以我将所有字符编码超过某个 Unicode 数字点,只是为了确定。它会占用更多空间,但是在定义了大部分语言之后,有时会为 Unicode 语言添加字符,因此可能会分散语言支持。如果您有兴趣发表评论,我会为您找到该代码。
我的理解水平适中,我不是 Rick James,尽管我的个人资料中的网站上有大约两三打翻译页面(使用搜索功能并搜索“翻译”),如果您想查看输出。在我做了这些事情之后,我不再让数据损坏了。我希望这有帮助!
推荐阅读
- r - 如何在日期上加或减数字?
- javascript - 如何在 localhost 上执行 React D3 组件
- sql-server - 如何将 SQL 输出参数与 FromSqlInterpolated 一起使用?或替代
- python-3.x - 正确的输出是什么?
- c# - 减少类似的依赖注入定义?
- reactjs - D3.Js:无法创建 Arc 以使用数据集创建多个甜甜圈
- c# - 如何强制 Linq-To-Sql 使用外部应用
- java - 通过 Java 代码实现测试自动化的大型机访问
- javascript - 从 ng-repeat 列表中删除特殊字符(从 CSV 解析)
- scheme - 有没有办法在列表中没有列表的情况下进行打印?