|
Long VARCHAR:
DROP TABLE IF EXISTS t1;
|
CREATE TABLE t1 (a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci) ENGINE=ColumnStore;
|
INSERT INTO t1 VALUES ('a');
|
INSERT INTO t1 VALUES ('ã');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
SELECT quote(a) FROM t1 WHERE a<='a ';
|
+----------+
|
| quote(a) |
|
+----------+
|
| 'a' |
|
+----------+
|
Looks wrong. The condition should match all records.
Short VARCHAR:
DROP TABLE IF EXISTS t1;
|
CREATE TABLE t1 (a VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci) ENGINE=ColumnStore;
|
INSERT INTO t1 VALUES ('a');
|
INSERT INTO t1 VALUES ('ã');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
SELECT quote(a) FROM t1 WHERE a<='a ';
|
+----------+
|
| quote(a) |
|
+----------+
|
| 'a' |
|
| 'a ' |
|
| 'a ' |
|
+----------+
|
It returns a different result set, but it is still wrong.
With other engines it works as expected:
DROP TABLE IF EXISTS t1;
|
CREATE TABLE t1 (a VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci) ENGINE=MyISAM;
|
INSERT INTO t1 VALUES ('a');
|
INSERT INTO t1 VALUES ('ã');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
SELECT quote(a) FROM t1 WHERE a<='a ';
|
+----------+
|
| quote(a) |
|
+----------+
|
| 'a' |
|
| 'ã' |
|
| 'a ' |
|
| 'ã ' |
|
| 'a ' |
|
| 'ã ' |
|
+----------+
|
DROP TABLE IF EXISTS t1;
|
CREATE TABLE t1 (a VARCHAR(4) CHARACTER SET utf8 COLLATE utf8_general_nopad_ci) ENGINE=MyISAM;
|
INSERT INTO t1 VALUES ('a');
|
INSERT INTO t1 VALUES ('ã');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
INSERT INTO t1 VALUES ('a ');
|
INSERT INTO t1 VALUES ('ã ');
|
SELECT quote(a) FROM t1 WHERE a<='a ';
|
+----------+
|
| quote(a) |
|
+----------+
|
| 'a' |
|
| 'ã' |
|
| 'a ' |
|
| 'ã ' |
|
| 'a ' |
|
| 'ã ' |
|
+----------+
|
|