【问题标题】:Loss of Unicode data - due to collation change?Unicode 数据丢失 - 由于排序规则更改?
【发布时间】:2012-07-25 18:47:17
【问题描述】:

我有一张带有Thai_CI_AS 排序规则的表,它没有正确存储à 等特殊字符。 存储 à 时,它会呈现为问号:?

我已经通过将该表的排序规则更改为默认的 latin* 来解决问题。

新数据(特殊字符)现在正在正确存储。

但旧数据仍然显示???。

如何刷新或调用任何方法以使旧数据正确显示?

----- 编辑-------

是否有一个 sql 查询允许将所有 ? 更改为 à 之类的其他内容?

例子

 ?sometext?
 ??sometext??
 ?????
 sometext??

全部转为

 àsometextà
 àsometextà
 ààààà
 sometextàà

谢谢你, 以下列是包含这些类型数据的列,

 id_name1, id_name2, id_name3.

请帮忙。非常感谢。

【问题讨论】:

    标签: sql sql-server collate


    【解决方案1】:

    很抱歉,您的旧数据已丢失。我不认为这是因为整理;这可能是因为您这样做了:

    INSERT dbo.table(column) SELECT 'à';
    

    不要用 N 字符正确地为 Unicode 数据添加前缀:

    INSERT dbo.table(column) SELECT N'à';
    ---- this is important ---------^
    

    但是,再一次,没有找回旧数据...您甚至自己说,当您在泰语排序规则下存储数据时,它显示? - 这意味着数据一开始就没有正确存储(很可能是因为缺少N)。

    【讨论】:

    • 我明白了。不过谢谢。有什么建议,我只想将所有 ? 更改为其他内容?谢谢。
    • 喜欢而不是问号使所有列上的所有问号变成à?示例某些列包含?sometext? 某些列包含???? 我想将其更改为àsometextà 和àààà。
    • @user1543644 你认为你表中的每个问号都应该是à,并且没有其他“特殊字符”可以被任何人使用吗?句末有真正的问号怎么办?
    • 这没有问题:) 我知道这一切à。如何做到这一点?
    • 将 varchar 更改为 NVARCHAR 有什么作用吗?
    【解决方案2】:

    如果这个问题与您的previous question 相关,那么答案是肯定的。

    VARCHAR 列仅包含单字节字符。在您的情况下,您应该将 VARCHAR 列更改为 NVARCHAR,然后更改列的排序规则。

    【讨论】:

    • 您好,谢谢您的回答,但一切都还在????做了你说的之后。但我想我还是手动更改所有? :)
    猜你喜欢
    • 2015-05-18
    • 2011-04-08
    • 2017-09-22
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2013-12-04
    相关资源
    最近更新 更多