我有一个曾经是 latin1 的 MySQL 数据库,我将所有表中的所有列都更改为 utf8。但是,我显然没有做我必须做的所有事情,因为我刚刚发现我疯狂地混合了拉丁语和 utf8。基本上,任何新表和列都是不同的。
有没有办法设置数据库的默认字符集和排序规则,以便当我向该数据库添加新表时它们是 utf8?
在 Windows 7 中,"English_United States.1252"
当我在安装程序中选择“英语,美国”区域设置时,排序规则设置为。在 Linux 中,排序规则"en_US.UTF-8"
默认设置为。
我还没有找到任何方法在 Windows 中将排序规则的代码集设置为 UTF-8,所以我只是想知道在这些示例情况下数据库的行为是否会有所不同?或者一般来说,排序规则的代码集部分的影响是什么?
我在两个数据库中都将编码设置为 UTF-8,问题是排序规则代码集的差异是否会导致行为差异。
它是常用的字符集之一。它代表什么?
它是某事的首字母缩写词吗?
嗯,这个问题是众所周知的,但如果有的话,我正在寻找一个更聪明的解决方案。
出于某种原因,系统无法识别某些字符,我无法比较列
下面是一个文本示例:
对
ASPIRADOR ULTRASSONICO-LOCAÇAO (NOTA FISCAL SERVIÇO)
错误的
ASPIRADOR ULTRASSONICO-LOCA€AO (NOTA FISCAL SERVI€O)
其实我是通过这个功能来解决这个问题的
create function fixcollation(@ps_Texto VARCHAR(4000)) returns VARCHAR(4000)
as
begin
declare @vlgsv1itu INT declare @nxn68ezzi INT declare @dw17rsyva VARCHAR(50) declare @iw8a2z01i VARCHAR(50) declare @t64e98xq6 VARCHAR(50) declare @zwjs2imy3 INT declare @jsyt85sy8 VARCHAR(4000)
----------------------------------------------------
set @dw17rsyva = ' …ƃ„µ·Ç¶Ž‚Šˆ‰ÔÒÓ¡‹ÖÞØ¢•ä“”àãå♣—–éëꚇ€§'
set @iw8a2z01i = 'áàãâäÁÀÃÂÄéèêëÈÉÊËíìïÍÌÏóòõôöÓÒÕÔÖúùûüÚÙÛÜçǺØ'
set @jsyt85sy8 = @ps_Texto set @zwjs2imy3 = IsNull(datalength(@ps_Texto), 0)
set @nxn68ezzi = 1
while(@nxn68ezzi <= IsNull(datalength( @ps_Texto), 0))
begin
set @vlgsv1itu = 1
while(@vlgsv1itu <= …
Run Code Online (Sandbox Code Playgroud) 如果我只使用 ASCII 字符,磁盘上的VARCHAR (255)
withutf8mb4_0900_ai_ci
会比VARCHAR (255)
使用 ASCII 大吗?
我试图将德语 \xc3\x9f 存储在 SQL Server 中,但结果是 \xc3\x83\xc5\xb8。\n例如“Gleimstra\xc3\x9fe”存储为“Gleimstra\xc3\x83\” xc5\xb8e"
\n但其他角色也会发生这种情况:
\n我查看了数据库排序规则,它显示SQL_Latin1_General_CP1_CI_AS
。然后我用谷歌搜索并找到了这个。
但我不知道我现有的排序规则是否导致了问题,或者我需要做什么才能存储 \xc3\xb6、\xc3\x9f、\xc3\xa9、\xc3\xab、\ 等特殊字符xc3\xa7、\xc3\xb1、\xc3\xad。
\n更新1
\n事实上,我将字符串存储在一nvarchar
列中。我通过 .NET 应用程序将数据发送到数据库。这是我在 web.config 中作为连接字符串的内容:
\n<add name="conn" connectionString="data source=(local)\\sql;Initial Catalog=mydb;User Id=myuser;Password=mypassword;" providerName="System.Data.SqlClient"/>
更新2
\n我从 JSON 文件中读取值,并将其传递给 a Newtonsoft.Json.Linq.JArray
,然后将其传递给函数,如下所示:
InsertStreetId(item.SelectToken("location.street").Value(Of String))\n\n\n Public Shared Function InsertStreetId(ByVal street As String) As Integer\n Dim streetId As Integer\n\n Dim …
Run Code Online (Sandbox Code Playgroud) 有腻子连接。
Putty 配置:
窗口-->翻译-->远程字符集-->utf-8
启动命令行MySQL
客户端。
使用西里尔字母执行插入,例如:
CREATE TABLE `category` (
`catName` varchar(40) NOT NULL DEFAULT '',
PRIMARY KEY (`catName`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into category(catName) values ('????????');
Run Code Online (Sandbox Code Playgroud)
结果是损坏的西里尔文符号插入到 DB 中。
这是我之前发布的帖子的后续问题。我们正在迁移到新的字符集。现在,我是一名程序员,我们有 DBA 将执行这项工作,但我想获得有关该过程的更多信息。我们当前的字符集是 WE8ISO8859P1 并使用 BYTE 字符语义。但是,我们正在迁移到 AL32UTF8。使用 BYTE 语义创建了一个包含 AL32UTF8 字符集的新数据库。DBA 在一些表上运行了一个脚本来检查是否有任何问题(我相信是 CSALTER)。运行脚本后,它说我们表中的某些行将被截断。该表包含一个设置为 4000 BYTES 的 VARCHAR2(BYTE) 列。导致潜在问题的行都包含特殊字符。我的问题是,我们如何在不截断信息的情况下导出/导入数据库中的表?为什么说它会被截断?我的第一个想法是,由于我们更改了字符集,它可能会存储旧数据库表中的某些字符,而不是将其存储到新数据库中时,字符集会占用更多存储空间。
我希望修复 Oracle 中的数据表,理想情况下是通过非特权 SQL,该 SQL 已将 UTF-8 数据插入到 UTF-8 数据库中,错误地使用了 Latin-1 字符集。
该符号? GREEK SMALL LETTER BETA
应该已进入数据库,但两个字符β
已进入......因为两个 UTF-8 字符
Î LATIN CAPITAL LETTER I WITH CIRCUMFLEX
后跟² SUPERSCRIPT TWO
.
此示例代码演示了问题和修复方法,但它仅适用于VARCHAR
列。一旦CLOB
使用了a ,转换就会失败:
-- This must return AL32UTF8 for this example to be valid
SELECT VALUE FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET';
CREATE TABLE EXAMPLE (T VARCHAR2(20));
INSERT INTO EXAMPLE (T) VALUES ('Example β');
SELECT T FROM EXAMPLE; -- Should return 'Example β'
SELECT …
Run Code Online (Sandbox Code Playgroud) 目前,每当我创建一个新的 MySQL 数据库时,我都会使用 utf8mb4 作为字符集并使用 utf8mb4_unicode_520_ci 作为排序规则,例如:
CREATE DATABASE IF NOT EXISTS db_name
DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
Run Code Online (Sandbox Code Playgroud)
是否有更新/升级的 MySQL 通用排序规则或字符集?
例如,如果有一个排序规则取代了 utf8mb4_unicode_520_ci,比如 utf8mb4_unicode_800_ci 或类似的东西?
谢谢你的帮助。
character-set ×10
collation ×6
mysql ×4
oracle ×3
encoding ×2
utf-8 ×2
command-line ×1
json ×1
migration ×1
mysql-8.0 ×1
postgresql ×1
sql-server ×1
t-sql ×1