我想知道如何使用SQL或命令行将*MySql latin1_swedish_ci*(例如所有重)转换为*utf8_bin*(所有重).有可能吗?
我们开始让我们的产品更加国际化,我们开始遇到外国字符的问题,主要来自西班牙语和欧洲语(希腊语等),并且想知道哪些是用于需要包含这些表的表的最佳排序规则字符?到目前为止,我们总是让PHPMyAdmin选择它想要的排序规则,但我们觉得我们需要更多控制.
谢谢.
在使用MySQL(v5.0.77)时,Collation有很多选择.我最初想的是UTF8-general_ci,但MySQL表明它不区分大小写,我认为会导致密码等对象出现问题.如果我想使用UTF8但想要区分大小写的数据我应该使用UTF8-bin吗?谢谢!
我有一个Unicode字符串编码,比如说UTF8.Unicode中的一个字符串可以包含少量字节表示.我想知道,是否有任何或可以创建任何规范(标准化)形式的Unicode字符串 - 所以我们可以例如比较这样的字符串memcmp(3)等.例如ICU或任何其他C/C++库可以做到吗?
是否可以通过sql查看特定模式的排序规则?我找到了各个列的示例,但我希望查找它的模式.
所以像猜测一样
SELECT 'collation_info' FROM DB_NAME
header('Content-type: text/html; charset=utf-8');虽然我可以看到 MySQL 表中保存的数据是希腊字符,但当我尝试从 PHP 中回显它们时,它们变成了“?” 问号。
我试图将一个city/state/zip字段分为城市、州和邮政编码。通常我会用charindexof','来获取城市和州,用isnumericandright()来获取邮政编码。
这对于 zip 来说效果很好,但是我现在处理的数据中的大多数行都没有逗号City ST Zip。有没有办法识别两个大写字符的索引?
如果没有,除了单独检查每个州的案例陈述之外,是否有人有更好的主意?
编辑:我发现 PATINDEX/COLLATE 选项的工作相当间歇性。请参阅下面我的回答。
我曾经有一个包含国家列表的PHP数组:
$countries = array(
'AX' => 'Åland Islands',
'AF' => 'Afghanistan',
'GB' => 'United Kingdom'
);
$collator = collator_create('en');
collator_asort($collator, $countries, Collator::SORT_STRING);
Run Code Online (Sandbox Code Playgroud)
显然,此示例的列表要短得多,但是此处的排序有效。我期望得到:
但是,我需要添加更多数据,并且它变成了多维数据:
$countries = array(
array(
'name' => 'Åland Islands',
'code' => 'AX'
),
array(
'name' => 'Afghanistan',
'code' => 'AF'
),
array(
'name' => 'United Kingdom',
'code' => 'GB'
)
);
usort($countries, function($a, $b){ return $a['name'] <=> $b['name']; });
Run Code Online (Sandbox Code Playgroud)
它对列表中的每个其他国家/地区进行排序,但是给了我这个:
我一生无法解决如何正确分类的问题。我意识到在当前状态下不会调用或应用任何整理程序,但是有没有办法使整理程序在多维环境中工作?
根据https://msdn.microsoft.com/en-us/library/ms184391.aspx
以下选择以不同的方式对Locations表进行排序,具体取决于整理,为什么以及如何将西班牙语整理将"Chiapas"作为最后一行?
CREATE TABLE Locations
(Place varchar(15) NOT NULL);
GO
INSERT Locations(Place) VALUES ('Chiapas'),('Colima')
, ('Cinco Rios'), ('California');
GO
--Apply an typical collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Latin1_General_CS_AS_KS_WS ASC;
GO
-- Apply a Spanish collation
SELECT Place FROM Locations
ORDER BY Place
COLLATE Traditional_Spanish_ci_ai ASC;
GO
Run Code Online (Sandbox Code Playgroud)
第一个查询(标准整理):
Place
-------------
California
Chiapas
Cinco Rios
Colima
Run Code Online (Sandbox Code Playgroud)
第二个查询(西班牙语整理):
Place
-------------
California
Cinco Rios
Colima
Chiapas
Run Code Online (Sandbox Code Playgroud) 我正在对用户名列表进行排序。当字母为小写时,排序命令按预期工作。
小写的预期和实际输出:
n
n_123
na
na_123
Run Code Online (Sandbox Code Playgroud)
当字符为大写并后跟下划线时,事情会变得很奇怪。
大写的预期输出:
N
N_123
NA
NA_123
Run Code Online (Sandbox Code Playgroud)
使用sort大写的实际输出:
N
NA
NA_123
N_123
Run Code Online (Sandbox Code Playgroud)
我以为我可以解决这个问题
env LC_COLLATE=C sort $file
Run Code Online (Sandbox Code Playgroud)
但没有骰子。
使用env LC_COLLATE=C sort 的实际输出:
N
NA
NA_123
N_123
Run Code Online (Sandbox Code Playgroud)
我在 Mac OS X 10.12.3 上运行 GNU bash,版本 4.4.12(1)-release (x86_64-apple-darwin16.3.0)
任何帮助将非常感激。