Ich gebe es auf, selbst mit MySQL 8 ist nix so wie es erwünscht wäre.
root@ute:~# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.33-0ubuntu0.22.04.2 (Ubuntu)
mysql> select c,hex(c),upper(c),hex(upper(c)) from t_utf8mb4_0900_ai_ci;
+------+--------+----------+---------------+
| c | hex(c) | upper(c) | hex(upper(c)) |
+------+--------+----------+---------------+
| ä | C3A4 | Ä | C384 |
| ß | C39F | ß | C39F |
+------+--------+----------+---------------+
2 rows in set (0,00 sec)
//edit: dasselbe mit utf8mb4_unicode_520_ci
Wozu dann noch mit Perls DBI und DBD::mysql testen.
utf8mb4 ist nur bedingt brauchbar mit MySQL. Leider muss eineR die Grenzen selbst testen, was geht und was nicht.
Also wie üblich fleißig "testcases" schreien und schreiben.
//EDIT2:
Nochmals upcase in diversen Sprachen getestet.
Python
Python 3.10.8 (tags/v3.10.8:aaaf517, Oct 11 2022, 16:50:30) [MSC v.1933 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 'ß'.upper()
'SS'
>>>
PHP (extension mbstring ist geladen)
~ # php -v
PHP 7.4.33 (cli) (built: Nov 2 2022 16:00:55) ( ZTS Visual C++ 2017 x64 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
~ # php -a
Interactive shell
php > print mb_strtoupper("äöüß");
ÄÖÜSS
php >
JavaScript
14:42:40.572 "ä".toLocaleUpperCase()
14:42:40.592 'Ä'
14:42:47.739 "ß".toLocaleUpperCase()
14:42:47.757 'SS'
Perl
Perl 5.32 # perl -MEncode -E "say Encode::encode_utf8(uc qq/äöüß/)";
ÄÖÜSS
Perl 5.12 # perl -MEncode -E "say Encode::encode_utf8(uc qq/äöüß/)";
ÄÖÜSS
Das versteh’ eine, warum MySQL das nicht korrekt tun will.
Werde aber zynisch lachen, wenn da eine "länderspezifische" utf8mb.... charset/collation genommen werden muss. Oder MySQLs utfmb4 ist veraltet. Ich weiß das nicht.
Last edited: 2023-06-16 16:05:35 +0200 (CEST)