Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: MySQL 5.7 -> 8.0 ja merkistöt / PHP

xxmss [04.05.2024 10:27:39]

#

Moi! Palvelimella MySQL päivittyy versiosta 5.7 versioon 8.0. Versiossa 8.0 MySQL:n oletusmerkistö kuulemma vaihtuu latin1:stä utf8mb4:ään ja aakkostukseen käytetty latin1_swedish_ci vaihtuu utf8mb4_0900_ai_ci:ksi.

character_set_server: latin1 -> utf8mb4
collation_server: latin1_swedish_ci -> utf8mb4_0900_ai_ci

Kun tietokannan taulut on luotu, on ne luotu näin:

CREATE TABLE taulu
(
...
) ENGINE=InnoDB CHARACTER SET latin1 COLLATE latin1_swedish_ci;

Vaikuttaako palvelimelle tuleva MySQL-versiopäivitys tietokantaan, jossa taulut luotu noin?

Miten saisin jatkossakin käytettyä latin1:tä ja latin1_swedish_ci:tä? En haluaisi koskea tietokannan tietoihin millään tavalla.

Käytössäni ovat PHP 8.x ja phpMyAdmin.

Tietokantaan yhteyttä otetaan seuraavalla PHP-koodilla:

class Tietokanta
{
 protected $yhteys;

 function __construct()
 {
  try
  {
   $this->yhteys = new PDO("mysql:host=localhost;dbname=tietokanta", "tunnus", "salasana");
   $this->yhteys->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);
   $this->yhteys->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   $this->yhteys->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
   $this->yhteys->exec("SET NAMES latin1");
  }
  catch (PDOException $e)
  {
   error_log($e);
  }
 }
}

Riittääkö tuo latin1 tuolla varmistamaan, että ääkköset ja muut toimivat jatkossakin OK, vaikka MySQL:n versio vaihtuukin?

Metabolix [04.05.2024 11:00:19]

#

Kyllä pitäisi riittää, koska päivitys ei muuta aiemman tietokannan sisältöä.

Grez [04.05.2024 11:40:12]

#

Se ei vaikuta tietokantaan, mutta kannattaa jatkossakin luoda mahdolliset uudet taulut määrittelemällä tuo merkistö ja lajittelujärjestys. Muuten tulee kivoja ylläreitä kun uudella oletuksella luodut taulut saa eri merkistön tai lajittelujärjestyksen kuin vanhat taulut.

muuskanuikku [04.05.2024 12:57:32]

#

Grez kirjoitti:

Se ei vaikuta tietokantaan, mutta kannattaa jatkossakin luoda mahdolliset uudet taulut määrittelemällä tuo merkistö ja lajittelujärjestys. Muuten tulee kivoja ylläreitä kun uudella oletuksella luodut taulut saa eri merkistön tai lajittelujärjestyksen kuin vanhat taulut.

Vähän nollapostaus. Totta kai noin on tehty, koska niin on pakko tehdä. Oli pakko tehdä jo vanhoillakin oletuksilla. Suomenkielisen sisällön sorttaus kun ei onnistunut vanhoillakaan oletuksilla, koska ääkköset tulkataan eriarvoisiksi eri collationeilla.

Grez [04.05.2024 14:30:44]

#

muuskanuikku kirjoitti:

Totta kai noin on tehty, koska niin on pakko tehdä. Oli pakko tehdä jo vanhoillakin oletuksilla.

Mielestäni aloittaja sanoi että vanhassa oletusmerkistö oli latin1 ja oletusjärjestys oli latin1_swedish_ci.

Eli siis ne on ihan samat kuin tuossa esitetyssä CREATE TABLE koodissa määritellyt. Eli nähdäkseni väitteesi siitä että nuo olisi ollut pakko määrittää eksplisiittisesti luodessa jo vanhallakin kannalla ei pidä paikkaansa vaan nimen omaan on ollut mahdollista että jotain tauluja on luotu ilman noita määrityksiä ja kaikki on toiminut ongelmitta, kun eksplisiittisesti määritellyissä tauluissa on olleet samat mitkä tauluille tulee oletuksena.

Vastaus

Muista lukea kirjoitusohjeet.
Tietoa sivustosta