WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Är MyISAM + latin1 standard? (https://www.wn.se/forum/showthread.php?t=27616)

wizzo 2008-03-02 15:12

Är MyISAM + latin1 standard? Eller borde jag ändra CHARSET=utf8, hur gör man det isåfall anger man bara den röda koden i sitt MySQL Query Browser script?

Citat:


mysql> SHOW CREATE TABLE webbshop.genre;
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| genre | CREATE TABLE `genre` (
`genre_id` smallint(5) unsigned NOT NULL auto_increment,
`beskrivning` varchar(30) NOT NULL,
PRIMARY KEY (`genre_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
+-------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>


hnn 2008-03-02 19:17

Om du ändrar till UTF8, så får du ändra anslutning, filer, alla teckenkodningar till UTF8.


latin1 är i princip standard i sverige.

wizzo 2008-03-02 20:39

Alla mina html/css sidor använder och sparas i UTF8. Mina SQL script filer sparas också i UTF8 automatiskt i min texteditor.
Men vad menar du med att jag måste ändra anslutning? Syftar du på MySQL anslutningen i min <?php ... ?> kodsnutt.

Citat:


<?php
// Connecting, selecting database
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('Could not connect: ' . mysql_error());

echo 'Connected successfully';
mysql_select_db('my_database') or die('Could not select database');

// Performing SQL query
$query = 'SELECT * FROM my_table';
$result = mysql_query($query) or die('Query failed: ' . mysql_error());

// Printing results in HTML
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";

// Free resultset
mysql_free_result($result);

// Closing connection
mysql_close($link);
?>


hnn 2008-03-02 20:43

Typ:

Citat:

$this->query('SET NAMES "UTF8"');
$this->query('SET CHARACTER SET UTF8');


wizzo 2008-03-02 20:48

Ojdå lite för avancerad programmeringssyntax för min smak. Är rädd för att jag inte kan kontrollera och testa den här typen av kodning ännu. Tack för tipset iallafall.

Jonas 2008-03-02 21:02

Citat:

Originally posted by wizzo@Mar 2 2008, 21:48
Ojdå lite för avancerad programmeringssyntax för min smak. Är rädd för att jag inte kan kontrollera och testa den här typen av kodning ännu. Tack för tipset iallafall.
Teckenkodningen i PHP är standard iso-8859-1, därför är latin1 standard i mysql kopplingen från PHP.
Du kan använda vilken teckenkodning som helst när du sparar data i php, är htmlsidan i latin1, och du sparar text i utf8 så kommer tecken att se lite skum ut i mysql, men den kommer att visas rätt på sidan.

Det hnn menar är att den första frågan till mysql efter anslutningen och val av databas skall vara:
Kod:

mysql_query("SET NAMES utf8;");
Vilket kommer att ställa om php's teckenkodning i anslutningen till utf8 (MySQL 4.0 eller senare)

wizzo 2008-03-02 23:11

Jag blir inte mycket klokare på det hela efter att ha läst en del om Characters sets och Collations på MySQLs hemsida. Bl.a. det här.
http://dev.mysql.com/doc/refman/5.0/en/cha...t-database.html

När vet man när man ska välja ett specifikt Character set och Collations istället för default som kommer med installationen?
Om jag kör med nedanstående default värden kommer jag få problem med min databas ifall jag nån gång i framtiden ska flytta över databasen till ett webbhotell som inte har sina servrar och kontor i Sverige?
Kod:

character_set_database latin1
collation_database latin1_swedish_ci

Vad för Character set + Collation bör man köra med för att göra sin databas internationell? Dvs. den ska kunna flyttas mellan olika länders webbhotell utan att det blir problem med datat i databaserna samt databasens skelett.

Magnus_A 2008-03-03 11:19

UTF-8 bör absolut användas som standard åtminstone i alla nya projekt.
Varför: Det är inte svårare, bara man ställer in rätt från början. Det är framtidssäkert, eftersom det fungerar nu och kommer att fungera i alla webbläsare. Och det är synkroniserat med officiell ISO-standard för teckenkodningar ISO/IEC 10646

Lumax 2008-03-03 11:27

Den största omedelbara fördelen med att använda UTF-8 är att du t.ex. slipper använda &auml; och kan köra med åäö som vanligt. Däremot så använder du helt andra strängjämförelsefunktioner i PHP (mb_string) vilket gör att du inte helt lätt bara kan gå över till UTF-8. Men vid nya projekt är det värt att överväga.

wizzo 2008-03-09 14:11

Ny fråga.

1.) Språk drop down lista.
När man loggar in i phpmyadmin då får man frågan "Språk" med en drop down lista. I listan finns UTF8 i alla möjliga språk om jag idag loggar in med "Swedish UTF8" och lägger in lite tabeller och data. Sedan om en vecka då råkar jag logga in med "Arabic UTF8" och lägger in lite tabeller och data. Får jag en korrupt databas med en massa konflikter i slutändan?

2.) Olika kollationering i en tabell eller mellan tabeller.
Som rubriken säger vad för konsekvenser råkar man ut för då om man har en stor databas med olika kollationering mellan tabeller?

3.) Vad är skillnaden mellan dessa kollationeringar gör dem inte samma sak?
utf8_bin Unicode (flerspråkig), Binär
utf8_general_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_unicode_ci Unicode (flerspråkig), skiftlägesokänsligt
utf8_swedish_ci Svensk, skiftlägesokänsligt

4.) Webhosten har skapat dessa kollationeringar.
Behöver jag synkronisera alla deras förinstallerade databaser så att dem antingen lyder under "UFT8_general_ci" respektive "LATIN1_swedish_ci" för att saker och ting ska stämma överens med mina egenskapade UTF8 databaser/tabeller?
Kod:

information_schema  utf8_general_ci 
mysql            latin1_swedish_ci



Alla tider är GMT +2. Klockan är nu 14:32.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson