mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
Merge next-mr -> next-4284-merge.
This commit is contained in:
@ -1 +1 @@
|
||||
--skip-grant-tables --skip-name-resolve --loose-safemalloc-mem-limit=4000000
|
||||
--loose-performance-schema=0 --skip-grant-tables --skip-name-resolve --loose-safemalloc-mem-limit=4000000
|
||||
|
@ -84,3 +84,64 @@ select hex(a) from t1;
|
||||
drop table t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=big5_chinese_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all values [80..FF][20..FF]
|
||||
# Expected valid big5 codes: [A1..F9][40..7E,A1..FE] (89x157=13973)
|
||||
#
|
||||
CREATE TABLE t1 AS
|
||||
SELECT concat(head, tail) AS code, ' ' AS a
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+2160 to U+2169 ROMAN NUMERAL ONE to ROMAN NUMERAL TEN
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# Expect U+0430 to U+0433 CYRILLIC SMALL LETTER A, BE, VE, GHE
|
||||
# Expect U+043D to U+0442 CYRILLIC SMALL LETTER EN, O, PE, ER, ES, TE
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -42,3 +42,79 @@ SELECT hex(a), hex(lower(a)), hex(upper(a)) FROM t1 ORDER BY binary(a);
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo End of 5.1 tests
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=cp932_japanese_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all codes [80..FF][20..FF]
|
||||
# excluding Half Width Kana [A1..DF]
|
||||
# Expected valid cp932 multibyte codes:
|
||||
# [81..9F,E0..FC][40..7E,80..fC] (60x188=11280 characters)
|
||||
#
|
||||
CREATE TABLE t1 AS
|
||||
SELECT concat(head, tail) AS code, ' ' AS a
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (head NOT BETWEEN 'A1' AND 'DF')
|
||||
AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
#
|
||||
# Populate t1 with Half Width Kana [A1..DF]
|
||||
#
|
||||
INSERT t1 (code) SELECT head FROM head
|
||||
WHERE (head BETWEEN 'A1' AND 'DF')
|
||||
ORDER BY head;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1
|
||||
WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a))
|
||||
ORDER BY code;
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+212B ANGSTROM SIGN
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# Expect no results
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -381,3 +381,89 @@ select hex(convert(_eucjpms 0xA5FE41 using ucs2));
|
||||
# the next character, which is a single byte character 0x41.
|
||||
select hex(convert(_eucjpms 0x8FABF841 using ucs2));
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=eucjpms_japanese_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all eucjpms codes.
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT 'XXXXXX' AS code, ' ' AS a LIMIT 0;
|
||||
#
|
||||
# Pupulate JIS-X-0201 range (Half Width Kana)
|
||||
# Expected valid code range: [8E][A1..DF] (1x63 characters)
|
||||
#
|
||||
INSERT INTO t1 (code) SELECT concat('8E', head) FROM head
|
||||
WHERE (head BETWEEN 'A1' AND 'DF') ORDER BY head;
|
||||
#
|
||||
# Populate JIS-X-0208 range
|
||||
# Expected valid codes: [A1..FE][A1..FE] (94x94=8836 characters)
|
||||
#
|
||||
INSERT INTO t1 (code) SELECT concat(head, tail)
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (head NOT BETWEEN '8E' AND '8F')
|
||||
AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
#
|
||||
# Populate JIS-X-0212 range
|
||||
# Expected valid codes [8F][A1..FE][A1..FE] (1x94x94=8836 characters)
|
||||
#
|
||||
INSERT INTO t1 (code) SELECT concat('8F', head, tail)
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
SELECT * FROM t1 WHERE CHAR_LENGTH(a)=2;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=3;
|
||||
|
||||
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a)) ORDER BY code;
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+0122 LATIN CAPITAL LETTER G WITH CEDILLA
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# Expect U+00F0 LATIN SMALL LETTER ETH
|
||||
# Expect U+01F5 LATIN SMALL LETTER G WITH ACUTE
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -107,3 +107,68 @@ SELECT s, hex(a), hex(u), hex(a2) FROM t2 ORDER BY s;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
--echo End of 5.4 tests
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=euckr_korean_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all codes [80..FF][20..FF]
|
||||
# Expected valid euckr codes: [81..FE][41..5A,61..7A,81..FE]
|
||||
#
|
||||
CREATE TABLE t1 AS
|
||||
SELECT concat(head, tail) AS code, ' ' AS a
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+212B ANGSTROM SIGN
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# Expect U+0111 LATIN SMALL LETTER D WITH STROKE
|
||||
# Expect U+24D0 to U+24E9 CIRCLED LATIN SMALL LETTER A to Z
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -33,3 +33,94 @@ SELECT hex(a) FROM t1 ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=gb2312_chinese_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all codes [80..FF][20..FF]
|
||||
# Expected valid gb2312 codes [A1..F7][A1..FE]
|
||||
#
|
||||
CREATE TABLE t1 AS
|
||||
SELECT concat(head, tail) AS code, ' ' AS a
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+2160 to U+216B ROMAN NUMERAL ONE to ROMAN NUMERAL TWELVE
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# Expect
|
||||
# U+00E0 LATIN SMALL LETTER A WITH GRAVE
|
||||
# U+00E1 LATIN SMALL LETTER A WITH ACUTE
|
||||
# U+00E8 LATIN SMALL LETTER E WITH GRAVE
|
||||
# U+00E9 LATIN SMALL LETTER E WITH ACUTE
|
||||
# U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
|
||||
# U+00EC LATIN SMALL LETTER I WITH GRAVE
|
||||
# U+00ED LATIN SMALL LETTER I WITH ACUTE
|
||||
# U+00F2 LATIN SMALL LETTER O WITH GRAVE
|
||||
# U+00F3 LATIN SMALL LETTER O WITH ACUTE
|
||||
# U+00F9 LATIN SMALL LETTER U WITH GRAVE
|
||||
# U+00FA LATIN SMALL LETTER U WITH ACUTE
|
||||
# U+00FC LATIN SMALL LETTER U WITH DIAERESIS
|
||||
# U+0101 LATIN SMALL LETTER A WITH MACRON
|
||||
# U+0113 LATIN SMALL LETTER E WITH MACRON
|
||||
# U+011B LATIN SMALL LETTER E WITH CARON
|
||||
# U+012B LATIN SMALL LETTER I WITH MACRON
|
||||
# U+0144 LATIN SMALL LETTER N WITH ACUTE
|
||||
# U+0148 LATIN SMALL LETTER N WITH CARON
|
||||
# U+014D LATIN SMALL LETTER O WITH MACRON
|
||||
# U+016B LATIN SMALL LETTER U WITH MACRON
|
||||
# U+01CE LATIN SMALL LETTER A WITH CARON
|
||||
# U+01D0 LATIN SMALL LETTER I WITH CARON
|
||||
# U+01D2 LATIN SMALL LETTER O WITH CARON
|
||||
# U+01D4 LATIN SMALL LETTER U WITH CARON
|
||||
# U+01D6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
|
||||
# U+01D8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
|
||||
# U+01DA LATIN SMALL LETTER U WITH DIAERESIS AND CARON
|
||||
# U+01DC LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -68,3 +68,94 @@ SELECT b FROM t1 GROUP BY 1 LIMIT 1 INTO @nullll;
|
||||
DROP TABLES t1;
|
||||
|
||||
--echo End of 5.0 tests
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=gbk_chinese_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all codes [80..FF][20..FF]
|
||||
# Expected valid gbk codes [81..FE][40..7E,80..FE]
|
||||
#
|
||||
CREATE TABLE t1 AS
|
||||
SELECT concat(head, tail) AS code, ' ' AS a
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a));
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+216A to U+216B ROMAN NUMERAL ELEVEN to ROMAN TWELVE
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# Expect
|
||||
# U+00E0 LATIN SMALL LETTER A WITH GRAVE
|
||||
# U+00E1 LATIN SMALL LETTER A WITH ACUTE
|
||||
# U+00E8 LATIN SMALL LETTER E WITH GRAVE
|
||||
# U+00E9 LATIN SMALL LETTER E WITH ACUTE
|
||||
# U+00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
|
||||
# U+00EC LATIN SMALL LETTER I WITH GRAVE
|
||||
# U+00ED LATIN SMALL LETTER I WITH ACUTE
|
||||
# U+00F2 LATIN SMALL LETTER O WITH GRAVE
|
||||
# U+00F3 LATIN SMALL LETTER O WITH ACUTE
|
||||
# U+00F9 LATIN SMALL LETTER U WITH GRAVE
|
||||
# U+00FA LATIN SMALL LETTER U WITH ACUTE
|
||||
# U+00FC LATIN SMALL LETTER U WITH DIAERESIS
|
||||
# U+0101 LATIN SMALL LETTER A WITH MACRON
|
||||
# U+0113 LATIN SMALL LETTER E WITH MACRON
|
||||
# U+011B LATIN SMALL LETTER E WITH CARON
|
||||
# U+012B LATIN SMALL LETTER I WITH MACRON
|
||||
# U+0144 LATIN SMALL LETTER N WITH ACUTE
|
||||
# U+0148 LATIN SMALL LETTER N WITH CARON
|
||||
# U+014D LATIN SMALL LETTER O WITH MACRON
|
||||
# U+016B LATIN SMALL LETTER U WITH MACRON
|
||||
# U+01CE LATIN SMALL LETTER A WITH CARON
|
||||
# U+01D0 LATIN SMALL LETTER I WITH CARON
|
||||
# U+01D2 LATIN SMALL LETTER O WITH CARON
|
||||
# U+01D4 LATIN SMALL LETTER U WITH CARON
|
||||
# U+01D6 LATIN SMALL LETTER U WITH DIAERESIS AND MACRON
|
||||
# U+01D8 LATIN SMALL LETTER U WITH DIAERESIS AND ACUTE
|
||||
# U+01DA LATIN SMALL LETTER U WITH DIAERESIS AND CARON
|
||||
# U+01DC LATIN SMALL LETTER U WITH DIAERESIS AND GRAVE
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -93,3 +93,78 @@ SELECT hex(a), hex(lower(a)), hex(upper(a)) FROM t1 ORDER BY binary(a);
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo # End of 5.1 tests
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=sjis_japanese_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all codes [80..FF][20..FF]
|
||||
# excluding Half Width Kana [A1..DF]
|
||||
# Expected valid sjis codes:
|
||||
# [81..9F,E0..FC][40..7E,80..fC] (60x188=11280 characters)
|
||||
#
|
||||
CREATE TABLE t1 AS
|
||||
SELECT concat(head, tail) AS code, ' ' AS a
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (head NOT BETWEEN 'A1' AND 'DF')
|
||||
AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
#
|
||||
# Populate Half Width Kana: [A1..DF]
|
||||
#
|
||||
INSERT t1 (code) SELECT head FROM head WHERE (head BETWEEN 'A1' AND 'DF');
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a)
|
||||
FROM t1
|
||||
WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a))
|
||||
ORDER BY code;
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+212B ANGSTROM SIGN
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# Expect no results
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -1212,3 +1212,88 @@ DROP TABLE t2;
|
||||
set names default;
|
||||
set character_set_database=default;
|
||||
set character_set_server=default;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # Start of 5.5 tests
|
||||
--echo #
|
||||
|
||||
--echo #
|
||||
--echo # Testing WL#4583 Case conversion in Asian character sets
|
||||
--echo #
|
||||
#
|
||||
# Populate t1 with all hex digits
|
||||
#
|
||||
SET NAMES utf8;
|
||||
SET collation_connection=ujis_japanese_ci;
|
||||
CREATE TABLE t1 (b VARCHAR(2));
|
||||
INSERT INTO t1 VALUES ('0'),('1'),('2'),('3'),('4'),('5'),('6'),('7');
|
||||
INSERT INTO t1 VALUES ('8'),('9'),('A'),('B'),('C'),('D'),('E'),('F');
|
||||
#
|
||||
# Populate tables head and tail with values '00'-'FF'
|
||||
#
|
||||
CREATE TEMPORARY TABLE head AS SELECT concat(b1.b, b2.b) AS head FROM t1 b1, t1 b2;
|
||||
CREATE TEMPORARY TABLE tail AS SELECT concat(b1.b, b2.b) AS tail FROM t1 b1, t1 b2;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Populate table t1 with all ujis codes.
|
||||
#
|
||||
#
|
||||
CREATE TABLE t1 AS SELECT 'XXXXXX' AS code, ' ' AS a LIMIT 0;
|
||||
#
|
||||
# Pupulate JIS-X-0201 range (Half Width Kana)
|
||||
# Valid characters: [8E][A1-DF]
|
||||
#
|
||||
INSERT INTO t1 (code) SELECT concat('8E', head) FROM head
|
||||
WHERE (head BETWEEN 'A1' AND 'DF') ORDER BY head;
|
||||
#
|
||||
# Populate JIS-X-0208 range
|
||||
# Expected valid range: [A1..FE][A1..FE]
|
||||
#
|
||||
INSERT INTO t1 (code) SELECT concat(head, tail)
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (head NOT BETWEEN '8E' AND '8F')
|
||||
AND (tail BETWEEN '20' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
#
|
||||
# Populate JIS-X-0212 range
|
||||
# Expected valid range: [8F][A1..FE][A1..FE]
|
||||
#
|
||||
INSERT INTO t1 (code) SELECT concat('8F', head, tail)
|
||||
FROM head, tail
|
||||
WHERE (head BETWEEN '80' AND 'FF') AND (tail BETWEEN '80' AND 'FF')
|
||||
ORDER BY head, tail;
|
||||
DROP TEMPORARY TABLE head, tail;
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
UPDATE t1 SET a=unhex(code) ORDER BY code;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'';
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=2;
|
||||
SELECT COUNT(*) FROM t1 WHERE a<>'' AND OCTET_LENGTH(a)=3;
|
||||
#
|
||||
# Display all characters that have upper or lower case mapping.
|
||||
#
|
||||
SELECT code, hex(upper(a)), hex(lower(a)),a, upper(a), lower(a) FROM t1 WHERE hex(a)<>hex(upper(a)) OR hex(a)<>hex(lower(a)) ORDER BY code;
|
||||
#
|
||||
# Make sure all possible conversion happened
|
||||
#
|
||||
# Expect U+0122 LATIN CAPITAL LETTER G WITH CEDILLA
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(LOWER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(LOWER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
#
|
||||
# U+00F0 LATIN SMALL LETTER ETH
|
||||
# U+01F5 LATIN SMALL LETTER G WITH ACUTE
|
||||
#
|
||||
SELECT * FROM t1
|
||||
WHERE HEX(CAST(UPPER(a) AS CHAR CHARACTER SET utf8)) <>
|
||||
HEX(UPPER(CAST(a AS CHAR CHARACTER SET utf8))) ORDER BY code;
|
||||
|
||||
DROP TABLE t1;
|
||||
|
||||
|
||||
--echo #
|
||||
--echo # End of 5.5 tests
|
||||
--echo #
|
||||
|
@ -1,8 +1,24 @@
|
||||
# Copyright (C) 2009-2010 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#
|
||||
# mysqld --help
|
||||
#
|
||||
--source include/not_embedded.inc
|
||||
--source include/not_windows.inc
|
||||
--source include/have_perfschema.inc
|
||||
|
||||
--source include/mysqld--help.inc
|
||||
|
||||
|
@ -1,8 +1,24 @@
|
||||
# Copyright (C) 2009-2010 Sun Microsystems, Inc.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; version 2 of the License.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
#
|
||||
# mysqld --help
|
||||
#
|
||||
--source include/not_embedded.inc
|
||||
--source include/windows.inc
|
||||
--source include/have_perfschema.inc
|
||||
|
||||
--source include/mysqld--help.inc
|
||||
|
||||
|
Reference in New Issue
Block a user