我在 MySQL 5.5.21 上,并尝试插入 '\xF0\x9F\x98\x8A' 笑脸字符。但是对于我的生活,我不知道该怎么做。
根据我一直在阅读的各种论坛,这是可能的。但是每当我尝试时,数据都会被截断。
mysql> INSERT INTO hour ( `title`, `content`, `guid` , `published` , `lang` , `type` ,
`indegree` , `lon` , `lat` , `state` , `country` , `hour` )
VALUES ( "title" , "content content" , "guid" , 1, 1,
"WEBLOG", 1, 1, 1, "state" , "country" , 1 );
Query OK, 1 row affected, 2 warnings (0.00 sec)
mysql> show warnings;
+---------+------+-------------------------------------------------------------------------------+
| Level | Code | Message |
+---------+------+-------------------------------------------------------------------------------+
| Warning | 1366 …
Run Code Online (Sandbox Code Playgroud) 我有一个带有 varchar 列的表。它允许使用商标 (™)、版权 (©) 和其他 Unicode 字符,如下所示。
Create table VarcharUnicodeCheck
(
col1 varchar(100)
)
insert into VarcharUnicodeCheck (col1) values ('MyCompany')
insert into VarcharUnicodeCheck (col1) values ('MyCompany™')
insert into VarcharUnicodeCheck (col1) values ('MyCompany?')
insert into VarcharUnicodeCheck (col1) values ('MyCompanyï')
insert into VarcharUnicodeCheck (col1) values ('MyCompany')
select * from VarcharUnicodeCheck
Run Code Online (Sandbox Code Playgroud)
但是varchar的定义说,它允许非 unicode 字符串数据。但 Trademark(™) 和 Registered(®) 符号是Unicode字符。定义是否与 varchar 数据类型的属性相矛盾?我阅读了几个链接,例如第一个和第二个。但是我仍然不明白为什么当定义说它只允许非 unicode 字符串值时它允许 unicode 字符串。
是否有一个或一行命令来修改数据库中的所有表。我想在数据库中的每个表中发出此命令:
ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;
Run Code Online (Sandbox Code Playgroud)
我的目标是将字符集从 latin1 修改为 utf8 到所有表。
更新: RDBMS 是 MySQL
我的计算机上安装了 SQL Server 2017。这是SELECT @@VERSION
返回的内容:
Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) 2018 年 7 月 21 日 07:47:45 版权所有 (C) 2017 Microsoft Corporation Enterprise Edition(64 位),Windows 10 Enterprise 10.0(Build 171) )`
直到昨天它都运行良好。突然SQL SERVER Service
没跑了。当我想手动运行该服务时,它显示3417 error
. 当我检查事件日志时,我看到了这个错误:
数据库 'master' 的脚本级升级失败,因为升级步骤 'msdb110_upgrade.sql' 遇到错误 200,状态 7,严重性 25。这是一个严重的错误情况,可能会干扰正常操作,数据库将脱机。如果在升级“master”数据库期间发生错误,它将阻止整个 SQL Server 实例启动。检查以前的错误日志条目是否有错误,采取适当的纠正措施并重新启动数据库,以便脚本升级步骤运行完成。`
经过一番谷歌搜索后,我发现我可以运行它/T902 switch
并尝试解决问题。但没有任何解决方案对我有用。所以我安装了相同SQL SERVER 2017
和恢复数据库的另一个实例。现在新安装的实例也有同样的问题。
可能是什么问题呢?
更新 这是 SQL Server 的完整错误日志。
2018-09-17 13:06:47.29 spid6s 配置选项“显示高级选项”从 1 更改为 1。运行 RECONFIGURE 语句进行安装。
2018-09-17 …
我正在使用 MySQL 5.5,当我显示有关字符集的变量时,我有
+--------------------------+----------------------------+
| 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 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
Run Code Online (Sandbox Code Playgroud)
我是否需要将character_set_database
和更改character_set_server
为utf8
?
我知道数据库字符集(NLS_CHARACTERSET
in select * from v$nls_parameters;
)和客户端字符集(客户端环境设置NLS_LANG
)是如何交互的。
然而,我不知道的是,我如何或是否可以确定, 对于已建立的会话,Oracle 认为当前客户端字符集是什么。
这可能吗?
注意:SELECT * FROM NLS_SESSION_PARAMETERS;
确实不包含字符集(上10G2)。
完全清楚我想完成什么:
GERMAN_GERMANY.WE8MSWIN1252
)[*]:如果db应用程序是sqlplus,示例如下:
...
sqlplus /nolog
connect user/pass@example
*magic command*;
CLIENT CHARACTERSET = ...
Run Code Online (Sandbox Code Playgroud)
杰克在他的回答中的注释提出了两个要点:
在将数据库转换为 UTF-8 时,我注意到有关控制字符 0x80-0x9F 的奇怪行为。例如,0x92(右撇号)不会被转换为 UTF-8 并使用以下方法截断列的其余内容:
CREATE TABLE `bar` (
`content` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1
INSERT INTO bar VALUES (0x8081828384858687898A8B8C8D8E8F909192939495969798999A9B9C9D9E9F);
Query OK, 1 row affected (0.06 sec)
SELECT content FROM bar;
+---------------------------------------------------------------------------------+
| content |
+---------------------------------------------------------------------------------+
| €‚ƒ„…†‡‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ |
+---------------------------------------------------------------------------------+
1 row in set (0.06 sec)
ALTER TABLE bar CHANGE content content TEXT CHARACTER SET UTF8;
Query OK, 1 row affected, 1 warning (0.06 sec)
Records: 1 Duplicates: 0 Warnings: 1
SHOW WARNINGS;
+---------+------+-------------------------------------------------------------------------------------+
| Level | Code …
Run Code Online (Sandbox Code Playgroud) 我们有一些基于数据库的 Web 应用程序,它们utf8mb4
用作字符集和utf8mb4_Standard
排序规则。
我们看到我们可以在这个设置中使用我们想要的任何字符。
在 SQL Server Express 中,情况对我来说不是很清楚。
当我切换到Standard
它时选择Latin1_General_CI_AS
排序规则。
但我不知道这是哪种字符编码,如果我们想将一些数据从utf7mb8
MySQL 表接管到 SQL Server 中,它会如何影响场景。
当我查看 SQL Server 中的数据类型定义时,我可以看到有 Unicode 和非 Unicode 类型。所以我想知道排序规则是否真的影响它的存储方式:
看来,如果您使用nchar
,nvarchar
或者nvarchar(max)
您在使用 UTF-16 时处于安全状态。
但是,整理Latin1_General_CI_AS
是什么意思?
例如,特别是如果你有中文字符,这会如何表现?
SELECT datname, pg_encoding_to_char(encoding)
FROM pg_database;
Run Code Online (Sandbox Code Playgroud)
...列出所有数据库,每个数据库都有其编码类型。
但是,我试图找出PostgreSQL 服务器中可用的所有编码类型。我可以查询所有可用的编码类型吗?
还是在第 23.3 章字符集支持中列出了唯一可用的编码类型?
我遇到了类似于这个问题的情况,即我正在使用一个旧数据库,该数据库在 latin1 表中包含 UTF8 内容(我知道非常难看)。
\n\n现在我正在从一个完全 utf8 的新应用程序获取新数据,并与其数据库一起使用。为了支持其他遗留系统,应用程序还在遗留表中写入其 utf8 数据的副本。据我所知,只要您读回并将这些数据显示为 UTF8,就应该可以在 latin1 表中写入 utf8 内容。有很多教程解释了如何长期解决这种情况,但我宁愿不应用它们,除非绝对必要(遗留系统将很快被解雇,我不希望有停机时间来解决这个问题,如果可能的)
\n\n这是一个最小的 SQL 脚本,它重现了我的问题:
\n\nCREATE TABLE `articles` (\n `content` mediumtext NOT NULL,\n FULLTEXT KEY `content` (`content`)\n) ENGINE=MyISAM DEFAULT CHARSET=latin1;\n\nSET NAMES utf8;\nSET CHARACTER SET utf8;\n-- Turkish word for Croatia, second char is \\xC4\\xB1\nINSERT INTO `articles` (`content`) VALUES (\'H\xc4\xb1rvatistan\');\n
Run Code Online (Sandbox Code Playgroud)\n\n在我的系统中,我没有从 MySQL 收到错误,但在INSERT
语句之后,该单词的第二个字符被默默删除并替换为文字?
(\'\\x3F\')。
mysql> SELECT content, HEX(content), HEX(\'H\xc4\xb1rvatistan\') FROM articles;\n+-------------+------------------------+--------------------------+\n| content | HEX(content) | HEX(\'H\xc4\xb1rvatistan\') |\n+-------------+------------------------+--------------------------+\n| …
Run Code Online (Sandbox Code Playgroud) character-set ×10
mysql ×5
encoding ×4
sql-server ×3
unicode ×3
utf-8 ×2
alter-table ×1
collation ×1
datatypes ×1
migration ×1
mysql-5.5 ×1
oracle ×1
percona ×1
postgresql ×1