2017-03-07 2 views
0

Ich benutze MySQL 5.5.37. Die Standard-Codierung für meine Datenbank UTF-8 ist ...Wie kann ich bei der Erstellung meiner MySQL-Ansicht dieselbe Zeichencodierung wie beim Standard der Datenbank beibehalten?

mysql> SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "my_db"; 
+----------------------------+ 
| default_character_set_name | 
+----------------------------+ 
| utf8      | 
+----------------------------+ 
1 row in set (0.00 sec) 

Allerdings, wenn ich eine Ansicht mit

CREATE OR REPLACE VIEW report_toc_item AS 
SELECT ti.*, pti.type_id PARENT_TYPE_ID 
      FROM toc_item ti 
      JOIN toc_item pti ON pti.id = ti.parent_id 
      WHERE ti.type_id = 'sub_segment'; 

erstellen und dann zeige ich diese Ansicht, der cndoing zeigt als „latin1“ statt utf8 ...

mysql> show create view report_toc_item; 
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
| View    | Create View                                                                                                                                                                                                                              | character_set_client | collation_connection | 
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
| report_toc_item | CREATE ALGORITHM=UNDEFINED DEFINER=`mytestuser`@`localhost` SQL SECURITY DEFINER VIEW `report_toc_item` AS select `ti`.`ID` AS `ID`,`ti`.`PARENT_ID` AS `PARENT_ID`,`ti`.`TOC_ID` AS `TOC_ID`,`ti`.`TITLE` AS `TITLE`,`ti`.`DESCRIPTION` AS `DESCRIPTION`,`ti`.`TYPE_ID` AS `TYPE_ID`,`ti`.`ORDER_NUM` AS `ORDER_NUM`,`ti`.`MY_OBJECT_SEGMENT_ID` AS `MY_OBJECT_SEGMENT_ID`,`ti`.`MY_OBJECT_SEGMENT_ORDER_NUM` AS `MY_OBJECT_SEGMENT_ORDER_NUM`,`ti`.`ELEMENT_ID` AS `ELEMENT_ID`,`ti`.`UNIT_TOC_ITEM_ID` AS `UNIT_TOC_ITEM_ID`,`ti`.`SHORT_NAME` AS `SHORT_NAME`,`ti`.`THIRD_PARTY_PROMPT_ID` AS `THIRD_PARTY_PROMPT_ID`,`pti`.`TYPE_ID` AS `PARENT_TYPE_ID` from (`toc_item` `ti` join `toc_item` `pti` on((`pti`.`ID` = `ti`.`PARENT_ID`))) where ((`ti`.`TYPE_ID` = 'sub_segment') and ((`pti`.`TYPE_ID` = 'lesson') or (`pti`.`TYPE_ID` = 'activity') or (`pti`.`TYPE_ID` = 'activity_practice') or (`pti`.`TYPE_ID` = 'unit_opener'))) | latin1    | latin1_swedish_ci | 
+--------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+----------------------+----------------------+ 
1 row in set (0.00 sec) 

Wie kann ich meine Ansicht die Standardcodierung der Datenbank respektieren? Ich würde es vorziehen, die Codierung nicht in die Erstellung der Ansicht zu codieren.

Antwort

0
SHOW CREATE DATABASE mydb; -- to see what the database's charset is 
SHOW VIEW x; -- to get the body 
DROP VIEW x; 
SET NAMES utf8mb4; -- or whatever you got from the first step 
CREATE VIEW ... -- recreate the view. 

Ja, unbeholfen.

+0

Gibt es eine Möglichkeit, die "SET NAMES utf8mb4;" Teil der Erstellung der Datenbank im Gegensatz zur Ausführung nach der Erstellung der Datenbank? – Dave

+0

Ihr Kommentar stimmt nicht mit Ihrer Frage überein. 'CREATE DATABASE ... CHARACTER SET ...' gilt für die Erstellung der _database_. 'SET NAMES ... CREATE VIEW ...' gilt für die Erstellung _view_. Ich stimme zu, dass dies "falsch" erscheint. –

Verwandte Themen