我有一个包含瑞典语/挪威语字符串的数据库表.
当我查询一些数据时,我得到如下输出:
set names latin1;
+-----------------------------------+
| name |
+-----------------------------------+
| Kid Interi##### |
| Bwg Homes |
| If Skadef####kring |
| Jangaard Export |
| Nordisk Film |
+-----------------------------------+
Run Code Online (Sandbox Code Playgroud)
现在如果我set names utf8;
为了看到具有正确编码的字符,则MySQL命令行的表格输出的格式化会中断.
set names utf8;
+-----------------------------------+
| name |
+-----------------------------------+
| Kid Interiør |
| Bwg Homes |
| If Skadeförsäkring |
| Jangaard Export |
| Nordisk Film |
+-----------------------------------+
Run Code Online (Sandbox Code Playgroud)
这不是一个大问题,但它使输出更难阅读.有人知道如何保持表格格式完整吗?
Mar*_*ski 111
使用选项启动客户端--default-character-set=utf8
:
mysql --default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)
您可以将其设置为/etc/mysql/my.cnf
文件中的默认值.
[mysql]
default-character-set=utf8
Run Code Online (Sandbox Code Playgroud)
上面的命令强制character_set_client
,character_set_connection
并character_set_results
配置变量是utf8
.
为了检查所有与charset相关的配置变量的值,您可以运行:
show variables like '%char%';
Run Code Online (Sandbox Code Playgroud)
它character_set_database
为您提供了当前所在的数据库(模式)的字符集.默认情况下,模式和表是使用指定的字符集创建的character_set_server
,除非在CREATE
语句中明确指定.
本character_set_server
可以在中更改my.cnf
文件:
[mysqld]
character-set-server = utf8
Run Code Online (Sandbox Code Playgroud)
此外,表和列可以拥有自己的字符集,这些字符集可能与其父表或模式不同.要专门检查数据库中每个表和列的值,请参阅以下答案: 如何查看MySQL数据库/表/列的字符集是什么?
如果要更改现有表和列的字符集,请参阅以下答案:如何将整个MySQL数据库字符集和排序规则转换为UTF-8?
有关mysql docsumentation中连接字符集的更多信息.
即使将所有字符集变量,表和列设置为utf8
,也可能会出现屏幕上看到奇怪字符的情况.例如,有人可能utf8
通过具有latin1
连接的客户端(例如通过运行mysql --default-character-set=utf8
)在列中编写Unicode字符.在这种情况下,您需要使用与写入值相同的字符集连接到数据库.您还可以通过正确的编码检索和重写它们.
注意:正如评论所指出的,myslq utf8
编码不是UTF-8的真实和完整实现.如果需要完整的UTF-8实现,可以使用utf8mb4
charset:
mysql --default-character-set=utf8mb4
Run Code Online (Sandbox Code Playgroud)
更多信息:MySQL中的utf8mb4和utf8字符集有什么区别?
归档时间: |
|
查看次数: |
53360 次 |
最近记录: |