Ich habe meine kleine MySQL-Tabelle abgeladen (manuell zu lokalisieren, das Problem reduziert), es zu zeigen hier:MySQL: zwei verschiedene Werte in MySQL-Tabellen werden als gleich behandelt (nicht eindeutige Schlüssel gesetzt)
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";
/*!40101 SET @[email protected]@CHARACTER_SET_CLIENT */;
/*!40101 SET @[email protected]@CHARACTER_SET_RESULTS */;
/*!40101 SET @[email protected]@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
CREATE TABLE `symb` (
`smb` varchar(200) NOT NULL,
`trtmnt` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `symb` (`smb`, `trtmnt`) VALUES
('і', 'ty'),
('ї', 'hr');
/*!40101 SET [email protected]_CHARACTER_SET_CLIENT */;
/*!40101 SET [email protected]_CHARACTER_SET_RESULTS */;
/*!40101 SET [email protected]_COLLATION_CONNECTION */;
Wenn Sie die MySQL-Tabelle oben erstellen und diese Abfrage ausführen
select * from symb where smb = 'ї';
oder diese ein (Abfragen unterschiedlich sind - finden Sie in der 'ї' Symbole vs 'і')
select * from symb where smb = 'і';
Dann können Sie sehen, dass Sie zwei Zeilen ausgewählt haben statt einer, wie ich es erwarten würde.
Um noch einmal zu betonen, diese beiden oben ausgewählten Abfragen sind unterschiedlich - das Symbol "ї" unterscheidet sich von "і" (beide sind kyrillische Symbole, "і" ist hier NICHT lateinisch).
Collation chosen was utf8_general_ci
Irgendwelche Gründe, warum ‚і‘ und ‚ї‘ wie die gleichen Symbole behandelt und was ist der richtige Weg, es anders zu machen? Ich muss die genaue Zeile auswählen, nicht zwei.
Die obigen Abfragen wurden in phpMyAdmin und HeidiSQL getestet, was bedeutet, dass es sich um das MySQL-Problem (Kollation?) Handelt und nicht um das Programm, das zum Ausführen von Abfragen verwendet wird. Jedes unterschiedliche Symbol sollte als ein anderes Symbol behandelt werden und die Tabelle sollte Groß- und Kleinschreibung beachten. Was stimmt nicht mit der obigen Tabelle? Als Ergebnis kann ich keinen eindeutigen Schlüssel für diese Zeile festlegen.
Vielen Dank.
Hinzugefügt nur auf Basis von Kommentaren: Was zeigt Ihnen SHOW TABLE STATUS LIKE 'symb'? Es zeigt mir:
Name symb
Engine InnoDB
Version 10
Row_format Compact
Rows 2
Avg_row_length 8192
Data_length 16384
Max_data_length 0
Index_length 0
Data_free 0
Auto_increment NULL
Create_time 22.05.16 12:11
Update_time NULL
Check_time NULL
Collation utf8_general_ci
Checksum NULL
Create_options
Comment
Was bedeutet SHOW TABLE STATUS LIKE ‚symb'' Show verwenden Du? –
make utf8_general_ci in jeder Spalte –
@TimBiegeleisen, Ich habe die Antwort auf Ihre Frage mit meinen Ergebnissen meiner Tabelle am Ende meiner Frage geschrieben. Vielen Dank. – Haradzieniec